/*
* 质量核验表单
* */

import 'dart:convert';

import 'package:center_beijing/api/component_api.dart';
import 'package:center_beijing/api/quality_api.dart';
import 'package:center_beijing/common/QRScan.dart';
import 'package:center_beijing/common/logutil.dart';
import 'package:center_beijing/common/notification.dart';
import 'package:center_beijing/common/styles.dart';
import 'package:center_beijing/config/global_config.dart';
import 'package:center_beijing/config/routeConfig.dart';
import 'package:center_beijing/widgets/custom_loading_widget.dart';
import 'package:center_beijing/widgets/selectRow_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart';
import 'package:left_scroll_actions/cupertinoLeftScroll.dart';
import 'package:left_scroll_actions/global/actionListener.dart';

class QualityForm extends StatefulWidget {
  @override
  _QualityFormState createState() => _QualityFormState();
}

class _QualityFormState extends State<QualityForm>
    with SingleTickerProviderStateMixin {
  AnimationController _controller;
  CustomLoading loading = CustomLoading.withMessage('提交中...');
  var currentSpot = Get.arguments;
  var samplingTime = ''; //抽检时间
  List selectList = [];

  var spotCheck = Map();
  bool listHide = false;

  @override
  void initState() {
    _controller = AnimationController(vsync: this);
    super.initState();
    if (currentSpot != null) {
      this.getSpotCheckDetail();
    } else {
      this.getOrderNumber();
    }
  }

/*
  * 获取抽检详情
  * */
  getSpotCheckDetail() async {
    var pass = {"id": currentSpot['id']};
    var result = await getElementSpotCheckEx(pass);
    if (result != null && result['hasError'] == null) {
      this.setState(() {
        spotCheck = result;
        selectList = result['elementSpotCheckInfoList'] == null
            ? []
            : result['elementSpotCheckInfoList'];
      });
    }
  }

  @override
  void dispose() {
    _controller.dispose();
    loading.dismiss();
    super.dispose();
  }

  /*
  * 发起任务流程，获取抽检编号
  * */
  getOrderNumber() async {
    var pass = {
      'item': json.encode(
          {"id": '', 'projectSectionId': GlobalConfig.selectFactory.tag}),
    };
    var result = await saveElementSpotCheck(pass);
    bus.emit('refreshQualityList');
    if (result != null && result['hasError'] == null) {
      this.setState(() {
        spotCheck = result;
        currentSpot = result;
      });
    }
  }

  /*
  * 获取构件详情
  * */
  getCompDetail(compId) async {
    bool have = false;
    for (var i = 0; i < selectList.length; i++) {
      if (selectList[i]['id'] == compId) {
        have = true;
        break;
      }
    }
    if (!have) {
      var result = await getComponentDetail(compId);
      if (result != null) {
        if (result['state'].toString() == '3') {
          Fluttertoast.showToast(msg: '构件已经报废');
        } else if (result['processStatus'] < 3) {
          var result1 = await Get.toNamed(RouteConfig.qualityFormEdit,
              arguments: {
                'compDetail':result,
                'spotCheck':spotCheck
              });
          if(result1!=null){
            this.getSpotCheckDetail();
          }
        }  else {
          Fluttertoast.showToast(msg: '构件已生产完成');
        }
      }
    }
  }

  /*
  * 删除抽检详情
  * */
  deleteDetail(value) async {
    var pass = {"id": value['id']};
    var result = await deleteElementSpotCheckInfo(pass);
    if (result != null && result['hasError'] == null) {
      this.setState(() {
        selectList.remove(value);
      });
    }
  }

  /*
  * 确认提交
  * */
  submit() async {
    loading.show(delay: 30);
    var pass = {"id": currentSpot['id']};
    var result = await submitElementSpotCheck(pass);
    loading.dismiss();
    if (result != null && result['hasError'] == null) {
      Fluttertoast.showToast(msg: '提交成功');
      bus.emit('refreshQualityList');
      Get.back();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('质量抽检'),
        ),
        body: Container(
          color: Styles.MainBackgroundColor,
          padding: EdgeInsets.fromLTRB(
              0, 0, 0, MediaQuery.of(context).padding.bottom + 70),
          child: SingleChildScrollView(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Container(
                  padding: EdgeInsets.fromLTRB(Styles.spacing16, Styles.spacing16,
                      Styles.spacing16, Styles.spacing16),
                  child: Text(
                    '任务单号:${this.spotCheck['checkNo']}(自动生成)',
                    style: TextStyle(
                        color: Styles.DetailColor, fontSize: Styles.Middle16Font),
                  ),
                ),
                // Container(
                //   margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                //   color: Colors.white,
                //   padding: EdgeInsets.fromLTRB(Styles.spacing8, 0, 0, 0),
                //   child: SelectRow(
                //       require: false,
                //       title: '抽检时间',
                //       rightText: samplingTime,
                //       selectCallback: (value) {
                //         this.setState(() {
                //           samplingTime = value;
                //         });
                //       }),
                // ),
                Container(
                  color: Colors.white,
                  padding: EdgeInsets.fromLTRB(Styles.spacing8, Styles.spacing8,
                      Styles.spacing8, Styles.spacing8),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Row(
                        children: [
                          RichText(
                              text: TextSpan(children: [
                                TextSpan(
                                    text: '已选构件（',
                                    style: TextStyle(
                                        color: Styles.DetailColor,
                                        fontSize: Styles.NormalFont)),
                                TextSpan(
                                    text: selectList.length.toString(),
                                    style: TextStyle(
                                        color: Styles.BlueColor,
                                        fontSize: Styles.NormalFont)),
                                TextSpan(
                                    text: '）',
                                    style: TextStyle(
                                        color: Styles.DetailColor,
                                        fontSize: Styles.NormalFont)),
                              ])),
                          GestureDetector(
                            onTap: () {
                              print('点击');
                              this.setState(() {
                                listHide = !listHide;
                              });
                            },
                            child: Container(
                              padding:
                              EdgeInsets.fromLTRB(Styles.spacing4, 0, 0, 0),
                              child: Text(
                                '查看',
                                style: TextStyle(
                                    color: Styles.BlueColor,
                                    fontSize: Styles.NormalFont),
                              ),
                            ),
                          )
                        ],
                      ),
                      Expanded(
                        child: Container(
                          padding: EdgeInsets.fromLTRB(
                              Styles.spacing16, 0, Styles.spacing16, 0),
                          margin: EdgeInsets.fromLTRB(
                              0, Styles.spacing8, 0, Styles.spacing8),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Expanded(
                                child: GestureDetector(
                                  onTap: () async {
                                    var result = await Get.toNamed(
                                        RouteConfig.qualitySelectComponent,
                                        arguments: {
                                          'selectList': selectList,
                                          'spotCheck': spotCheck
                                        });
                                    if (result != null) {
                                      this.getSpotCheckDetail();
                                    }
                                  },
                                  child: Container(
                                    alignment: Alignment.center,
                                    padding: EdgeInsets.fromLTRB(
                                        Styles.spacing16,
                                        Styles.spacing8,
                                        Styles.spacing16,
                                        Styles.spacing8),
                                    decoration: BoxDecoration(
                                        color: Styles.GrayLight,
                                        border: Border.all(
                                            color: Styles.LineColor, width: 1),
                                        borderRadius: BorderRadius.all(
                                            Radius.circular(4.0.r))),
                                    child: Text(
                                      '搜索构件',
                                      style: TextStyle(
                                          color: Styles.LeftTitleColor,
                                          fontSize: Styles.NormalFont),
                                    ),
                                  ),
                                ),
                              ),
                              GestureDetector(
                                onTap: () async {
                                  var result = await QrScan.scan(context);
                                  if (result != null) {
                                    if (result['type'] == 1) {
                                      this.getCompDetail(result['code']);
                                    } else {
                                      showDialog(
                                          barrierDismissible: false,
                                          context: context,
                                          builder: (BuildContext context) {
                                            return AlertDialog(
                                              title: Text('注意'),
                                              content: Text('请扫描构件二维码！'),
                                              actions: <Widget>[
                                                new Container(
                                                  child: FlatButton(
                                                    child: new Text(
                                                      "确定",
                                                      style: TextStyle(
                                                          color: Colors.red),
                                                    ),
                                                    onPressed: () {
                                                      Navigator.pop(context);
                                                    },
                                                  ),
                                                ),
                                              ],
                                            );
                                          });
                                    }
                                  }
                                },
                                child: Container(
                                  color: Styles.BlueColor,
                                  padding: EdgeInsets.fromLTRB(
                                      Styles.spacing8,
                                      Styles.spacing8,
                                      Styles.spacing8,
                                      Styles.spacing8),
                                  margin: EdgeInsets.only(left: Styles.spacing16),
                                  child: Image.asset(
                                    'assets/images/scan.png',
                                    width: 20.w,
                                    height: 20.h,
                                    fit: BoxFit.contain,
                                    color: Colors.white,
                                  ),
                                ),
                              )
                            ],
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
                !listHide
                    ? Column(
                  children: this.selectList.map((item) {
                    return CupertinoLeftScroll(
                      // important, each Row must have different key.
                      // DO NOT use '$index' as Key! Use id or title.
                      key: Key(item.toString()),
                      // left scroll widget will auto close while the other widget is opened and has same closeTag.
                      // 当另一个有相同closeTag的组件打开时，其他有着相同closeTag的组件会自动关闭.
                      closeTag: LeftScrollCloseTag(item.toString()),
                      buttonWidth: 80,
                      child: GestureDetector(
                        onTap: () async {
                          // var result = await Get.toNamed(RouteConfig.qualityFormEdit,
                          //     arguments: {
                          //       'compDetail':item,
                          //       'spotCheck':spotCheck
                          //     });
                          LogUtil.d(item);
                          var bbq = json.decode(item['formJson']);
                          LogUtil.d(bbq);
                        },
                        child: Container(
                          color: Colors.white,
                          padding: EdgeInsets.fromLTRB(
                              Styles.spacing8,
                              Styles.spacing8,
                              Styles.spacing8,
                              Styles.spacing8),
                          margin: EdgeInsets.only(top: Styles.spacing8),
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Row(
                                children: [
                                  Container(
                                    margin: EdgeInsets.only(
                                        right: Styles.spacing8),
                                    height: 20.h,
                                    width: 4.w,
                                    color: Styles.BlueColor,
                                  ),
                                  Text(
                                    (item['elementInfoVO'] != null &&
                                        item['elementInfoVO']['compKind']
                                        ['compKindName'] !=
                                            null)
                                        ? item['elementInfoVO']['compKind']
                                    ['compKindName']
                                        : '--',
                                    style: TextStyle(
                                        color: Styles.DetailColor,
                                        fontSize: Styles.Middle16Font),
                                  ),
                                ],
                              ),
                              Container(
                                margin: EdgeInsets.fromLTRB(
                                    Styles.spacing8, 0, Styles.spacing8, 0),
                                child: Column(
                                  crossAxisAlignment:
                                  CrossAxisAlignment.start,
                                  children: [
                                    Text(
                                      item['elementInfoVO'] != null &&
                                          item['elementInfoVO']['code'] !=
                                              null
                                          ? item['elementInfoVO']['code']
                                          : '--',
                                      style: TextStyle(
                                          color: Styles.DetailColor,
                                          fontSize: Styles.Middle16Font),
                                    ),
                                    Text(
                                      (item['elementInfoVO'] != null &&
                                          item['elementInfoVO']
                                          ['orderInfo'] !=
                                              null &&
                                          item['elementInfoVO']
                                          ['orderInfo']
                                          ['orderName'] !=
                                              null)
                                          ? item['elementInfoVO']['orderInfo']
                                      ['orderName']
                                          : '--',
                                      style: TextStyle(
                                          color: Styles.LeftTitleColor,
                                          fontSize: Styles.NormalFont),
                                    ),
                                    Text(
                                      item['elementInfoVO'] != null &&
                                          item['elementInfoVO']
                                          ['levelPath'] !=
                                              null
                                          ? (item['elementInfoVO']
                                      ['levelPath']
                                          .split('&_&_&'))
                                          .join('-')
                                          : '--',
                                      style: TextStyle(
                                          color: Styles.LeftTitleColor,
                                          fontSize: Styles.NormalFont),
                                    ),
                                  ],
                                ),
                              )
                            ],
                          ),
                        ),
                      ),
                      buttons: <Widget>[
                        GestureDetector(
                          onTap: () {
                            this.deleteDetail(item);
                            print('删除');
                          },
                          child: Container(
                            margin: EdgeInsets.fromLTRB(
                                0, 0, Styles.spacing16, 0),
                            decoration: BoxDecoration(
                              color: Styles.RedColor,
                              borderRadius:
                              BorderRadius.all(Radius.circular(14.0.r)),
                            ),
                            alignment: Alignment.center,
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                Image(
                                  image: AssetImage(
                                      'assets/images/delete.png'),
                                  width: 16.w,
                                  height: 16.w,
                                  fit: BoxFit.contain,
                                ),
                                Text(
                                  '删除',
                                  style: TextStyle(
                                      color: Colors.white,
                                      fontSize: Styles.NormalFont),
                                )
                              ],
                            ),
                          ),
                        ),
                      ],
                      onTap: () {
                        print('tap row');
                      },
                    );
                  }).toList(),
                )
                    : Container(),
              ],
            ),
          ),
        ),
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        floatingActionButton: Container(
          padding: EdgeInsets.fromLTRB(
              Styles.spacing8, Styles.spacing8, Styles.spacing8, 10),
          child: Container(
            decoration: new BoxDecoration(
              //背景
              color: Styles.BlueColor,
              //设置四周圆角 角度
              borderRadius: BorderRadius.all(Radius.circular(12.0)),
            ),
            child: FlatButton(
              disabledColor: Styles.SelectColor,
              onPressed: () {
                FocusScope.of(context).requestFocus(new FocusNode());
                showDialog(
                    barrierDismissible: false,
                    context: this.context,
                    builder:
                        (BuildContext context) {
                      return AlertDialog(
                        title: Text('注意'),
                        content: Text('确认提交吗？'),
                        actions: <Widget>[
                          new Container(
                            child: FlatButton(
                              child: new Text(
                                "取消",
                                style: TextStyle(
                                    color: Colors
                                        .black),
                              ),
                              onPressed: () {
                                Navigator.pop(
                                    context);
                              },
                            ),
                          ),
                          new Container(
                            child: FlatButton(
                              child: new Text(
                                "确定",
                                style: TextStyle(
                                    color: Colors
                                        .red),
                              ),
                              onPressed: () {
                                Navigator.pop(
                                    context);
                                this.submit();
                              },
                            ),
                          ),
                        ],
                      );
                    });
              },
              child: Container(
                height: Styles.MainButtonHeight,
                alignment: Alignment.center,
                child: Text(
                  '确认提交',
                  style: TextStyle(
                      fontSize: Styles.MainButtonTextFont, color: Colors.white),
                ),
              ),
            ),
          ),
        ));
  }
}
